package com.tangbao.util;

import java.util.concurrent.atomic.AtomicInteger;

/**
 * 功能: 生成字符串类型主键
 * 作者: zhouxin
 * 日期: 2017/12/18
 */
public class IDGenerate {
    /**
     * AtomicInteger是一个提供原子操作的Integer类，通过线程安全的方式操作加减。
     * AtomicInteger提供原子操作来进行Integer的使用，因此十分适合高并发情况下的使用。
     */
    private static final AtomicInteger integer = new AtomicInteger(0);

    /**
     * 生成字符串类型主键
     * @return
     */
    public static Long getId() {
        long time = System.currentTimeMillis();
        StringBuffer str = new StringBuffer(20);

        str.append(time);
        //调用AtomicInteger的getAndIncement返回的是增加之前的值
        //与平时i++所对应的原子操作为：getAndIncrement()
        int intValue = integer.getAndIncrement();
        if(integer.get() >= 10000) {
            integer.set(0);
        }
        str.append(intValue);
        return Long.parseLong(str.toString());



    }


}
